package com.ruoyi.common.utils.jwt;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;

import java.util.Date;

public class JWTUtil {
    private static final String JWT_KEY = "lc_key";

    public static String getToken(Long userid, String openid) {
        JWTCreator.Builder builder = JWT.create();
        return builder.withClaim("userid", userid)       // 设置用户名
                .withClaim("openid", openid)
                .withExpiresAt(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))      // token 过期时间
                .sign(Algorithm.HMAC256(JWT_KEY));      // 用于签名加密的密钥，为一个字符串（需严格保密）
    }

    public static Long getUserid(String token) {
        try {
            Algorithm algorithm = Algorithm.HMAC256(JWT_KEY);       // JWT_KEY用于签名和验证JWT
            JWTVerifier verifier = JWT.require(algorithm)       // 指定了用于验证JWT的算法
                    .build();       // 构建了JWTVerifier对象
            DecodedJWT jwt = verifier.verify(token);        // 返回一个DecodedJWT对象，该对象包含了JWT中的所有声明（claims）
            return jwt.getClaim("userid").asLong();
        } catch (Exception e) {
            // 处理异常，例如 token 无效或过期
            return null;
        }
    }
}
